最详细的MyBatis批量添加、更新、删除实战篇(日常开发) |
您所在的位置:网站首页 › mybatis 内置参数 › 最详细的MyBatis批量添加、更新、删除实战篇(日常开发) |
MyBatis批量操作
前言一、MybatIs标签foreach1.collection属性主要有一下3种情况:
二、批量添加2.1 Mapper.xml2.2 Controller层2.3 Json数组集合数据
三、批量更新1.Mapper.xml1.1 批量更新第一种方法1.2 批量更新第二种方法
2.Controller层3.Json集合数据
四、批量删除1. 传入的是List数组对象1.Mapper.xml2.Controller层3.Json集合数据
2. 传入的是数组1.Mapper.xml2.Controller层3.Json数组
2. 传入的是Map集合1.Mapper.xml2.Controller层3.map数据
五、批量查询1.Mapper.xml2.Controller层3.Json集合数据
总结
前言
工作中,经常会遇到很多批量操作的需求:批量添加、批量更新、批量删除、批量导入、批量审核等等,下面这篇文章我们将一一复现,首先我们先了解一下mybatis的标签foreach循环: 一、MybatIs标签foreachforeach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。 foreach元素的属性主要有 item,index,collection,open,separator,close。 1》item集合中每一个元素进行迭代时的别名 2》index表示在迭代过程中,每次迭代到的位置 3》open该语句以什么开始 4》separator在每次进行迭代之间以什么符号作为分隔符 5》close以什么结束 1.collection属性主要有一下3种情况:1.1 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list 1.2 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array 1.3 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了 二、批量添加当传入参数是list集合的时候: 2.1 Mapper.xml INSERT INTO t_employee(id, name, age, salary, department_id,update_time) VALUES (#{item.id},#{item.name},#{item.age},#{item.salary},#{item.departmentId},now()) 2.2 Controller层 @PostMapping("saveBath") @ResponseBody public CommonResult saveBath(@RequestBody List employeeList){ return employeeService.saveEmp(employeeList); }@ResponseBody:返回Json数据 @RequestBody:接受Json数据 2.3 Json数组集合数据 [ { "id": 1, "name": "DT测试1", "age": 26, "salary": 10000.0, "departmentId": 1 }, { "id": 2, "name": "DT测试2", "age": 26, "salary": 10000.0, "departmentId": 2 } ] 三、批量更新 1.Mapper.xml 1.1 批量更新第一种方法 UPDATE t_employee name = #{item.name}, age = #{item.age}, salary = #{item.salary}, salary = #{item.departmentId}, where id = #{item.id}记得连接数据库加: allowMultiQueries=true不然会报如下错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE t_employee MySQL连接数据库时,添加语句:“allowMultiQueries=true”的作用: 1.可以在sql语句后携带分号,实现多语句执行。 2.可以执行批处理,同时发出多个SQL语句。 这种方式就是通过SQL拼接,单条单条的进行更新。 1.2 批量更新第二种方法 update t_employee when id=#{i.id} then #{i.name} when id=#{i.id} then #{i.age} where id = #{i.id}实际上是通过case when语句进行批量更新,只要一条SQL语句: 当然除了上面两种方式外,还可通过如下: 批量更新第三种方法,用ON DUPLICATE KEY UPDATE,就是一个批量插入操作,在插入的时候,如果已存在,则更新,所以可以变相达到批量修改的效果。一般不推荐这种更新大数据量的SQL,关于这种方式小编前面的文章也有说过使用方式,这里不再赘述。 注意:上面的方式是针对多个字段的情况,如果只是更新单个字段,可以这么写: UPDATE t_employee SET name = CASE WHEN id = #{item.id} THEN #{item.name} END WHERE id IN #{item.id} 2.Controller层 @PostMapping("updateBatch") @ResponseBody public CommonResult updateBatch(@RequestBody List employeeList){ return employeeService.updateBatch(employeeList); } 3.Json集合数据 [ { "id": 1, "name": "DT测试111", "age": 2611 }, { "id": 2, "name": "DT测试211", "age": 2611 } ] 四、批量删除 1. 传入的是List数组对象 1.Mapper.xml DELETE FROM t_employee WHERE id IN #{item.id} 2.Controller层 @PostMapping("deleteBath") @ResponseBody public CommonResult deleteBath(@RequestBody List employeeList){ return employeeService.deleteBath(employeeList); } 3.Json集合数据 [ { "id": 1 }, { "id": 2 } ] 2. 传入的是数组 1.Mapper.xml DELETE FROM t_employee WHERE id IN #{ids} 2.Controller层 @PostMapping("deleteBath") @ResponseBody public CommonResult deleteBath(@RequestBody int[] ids){ return employeeService.deleteBath(ids); } 3.Json数组 [1,2] 2. 传入的是Map集合 1.Mapper.xml DELETE FROM t_employee WHERE id IN #{item} int deleteBath(@Param("ids") Map ids); 2.Controller层 @PostMapping("deleteBath") @ResponseBody public CommonResult deleteBath(@RequestBody Map map){ // 接收List List ids = (List) map.get("ids"); Map stringMap = new HashMap(); ids.forEach(id -> stringMap.put("ids", id)); return employeeService.deleteBath(stringMap); } 3.map数据 { "ids": [1,2] } 五、批量查询 1.Mapper.xml SELECT * FROM t_employee WHERE id IN #{item.id} 2.Controller层 @GetMapping("findBath") @ResponseBody public CommonResult findBath(@RequestBody List employeeList){ return employeeService.findBath(employeeList); } 3.Json集合数据 [ { "id": 1 }, { "id": 2 } ]至于其它的数据格式就不再赘述了,很简单,变一下数据格式就可以了: 总结本篇完结!熬夜干货,创作不易,动动小手点赞吧!!!!后面会继续输出更多干货给大家,喜欢的请关注小编CSDN:https://blog.csdn.net/qq_41107231 以及掘金:https://juejin.cn/user/3940246036699848 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |